package com.sk.ccflower.server.lib.sysUtils;


import java.io.File;

import com.sk.ccflower.lib.define.Consts;

/**
 * 시스템의 각종 환경 값을 가져오는 utility 클래스
 *
 * @author 김정회
 *
 */
public class Environment{

    public static String defaultCcFlowerHome;
    /**
     * 시스템의 환경변수값을 가져오는 함수
     * @param name: 환경변수 명
     * @return: 환경변수값
     * @throws Exception
     */
    public static String getenv( String name ) throws Exception{
        String envValue=System.getenv( name );

        if( envValue==null && defaultCcFlowerHome == null )
            throw( new Exception( "환경변수 '"+name+"'이 정의되지 않았습니다." ) );
        if( defaultCcFlowerHome != null )
            return defaultCcFlowerHome;
        else
            return envValue;
    }
    
    /**
     * 시스템의 환경변수값을 가져오는 함수
     * @param name: 환경변수 명
     * @param append: 환경변수명 뒤에 추가되는 스트링
     * @return: 환경변수값 + 추가 스티링
     * @throws Exception
     */
    public static String getenv( String name , String append ) throws Exception{

        return getenv( name )+append;
    }
    
    /**
     * NMS가 설치된 홈 디렉토리를 가져오는 함수.
     * 환경변수의 'CCFLOWER_HOME'를 가져온다. 따라서 환경변수에 'CCFLOWER_HOME'이 정의되어 있어야 한다.
     * @return: NMS 홈 디렉토리
     * @throws Exception
     */
    public static String getCcFlowerHome() throws Exception{
        return getenv( Consts.CCFLOWER_SVR_HOME );
    }
    
    public static String getCcFlowerHomeBin() throws Exception{
        return getCcFlowerHome() + File.separator + Consts.CCFLOWER_BIN;
    }
    
    /**
     * 로그를 기록하는 Base 디렉토리를 가져오는 함수.
     * 모든 로그는 해당 디렉토를 기준으로 저장되어야 한다.
     * @return: Base 로그 디렉토리
     * @throws Exception
     */
    public static String getLogDir() throws Exception{
        return getCcFlowerHome()+File.separator+Consts.CCFLOWER_LOG;
    }
    
    /**
     * 구성정보를 저장하는 디렉토리를 가져오는 함수
     * @return: 구성정보 저장 디렉토리
     * @throws Exception
     */
    public static String getCfgDir() throws Exception{
        return getCcFlowerHome()+File.separator+Consts.CCFLOWER_CFG;
    }
    
    public static String getCfgConfigDir() throws Exception{
        return getCfgDir() + File.separator + Consts.CCFLOWER_CFG_CONFIG;
    }
    
    public static String getCfgProcDir() throws Exception{
        return getCfgDir() + File.separator + Consts.CCFLOWER_CFG_PROC;
    }
    
    public static String getCfgXmlrpcDir() throws Exception {
        return getCfgDir() + File.separator + Consts.CCFLOWER_CFG_XMLRPC;
    }
    
    public static String getCfgLog4jDir() throws Exception{
        return getCfgDir() + File.separator + Consts.CCFLOWER_CFG_LOG4J;
    }
    
    public static String getCfgLog4jRunDir() throws Exception{
        return getCfgLog4jDir() + File.separator + Consts.CCFLOWER_CFG_LOG4J_RUN;
    }
    
    /**
     * 데이터를 저장하는 디렉토리를 가져오는 함수
     * @return
     * @throws Exception
     */
    public static String getDataDir() throws Exception{
        return getCcFlowerHome() + File.separator + Consts.CCFLOWER_DATA;
    }
    
    public static String getDataProfileDir() throws Exception{
        return getDataDir() + File.separator + "profile";
    }
    
}
